home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / t3_1 / risc_src.lha / risc_sources / link / fix.t < prev    next >
Text File  |  1989-06-30  |  1KB  |  33 lines

  1. (herald fix)
  2.  
  3. (define (write-data-section-header stream)   
  4.   (write-string stream ".data")
  5.   (vm-write-byte stream 0)
  6.   (vm-write-byte stream #x20)
  7.   (vm-write-byte stream #x20)
  8.   (write-int stream (text-size))      ; phys addr
  9.   (write-int stream (text-size))      ; virtual addr
  10.   (write-int stream (data-size))    
  11.   (write-int stream (+ (text-size) (headers-size)))    ;offset in file
  12.   (write-int stream (+ (headers-size) (text-size) (data-size)))    ;  reloc
  13.   (write-int stream 0)      ; no gp table
  14.   (write-half  stream #xffff)        ;reloc overflow
  15.   (write-half stream 0)            ;no gp table
  16.   (write-int stream #x20000040))
  17.  
  18. (define (cymbal-table-offset)
  19.   (+ (headers-size) (text-size) (data-size)
  20.      (* RELOC-SIZE (+ reloc-length 1))))
  21.  
  22. (define (write-relocation stream)
  23.   (write-int stream (+ reloc-length 1))    ;number of relocs
  24.   (write-int stream 0)            ;R_ABS
  25.   (walk (lambda (item)
  26.       (destructure (((addr . (lw .  hb)) item))
  27.         (write-data stream (car item))
  28.         (write-half stream lw)
  29.         (vm-write-byte stream 0)
  30.         (vm-write-byte stream hb)))
  31.         (sort-list! (lstate-data-reloc *lstate*)
  32.                     (lambda (x y)      
  33.                        (fx< (car x) (car y))))))